1.2.2 编写一个Dockerfile

Dockerfile是一个包含一系列命令的文本文件。本示例中我们将使用的Dockerfile如代码清单1-1所示。创建一个新目录,移动到这个目录里,然后使用这些内容创建一个名为“Dockerfile”的文件。

代码清单1-1 todoapp Dockerfile

FROM node  ⇽--- 定义基础镜像
LABEL maintainer ian.miell@gmail.com  ⇽--- 声明维护人员
RUN git clone -q https://github.com/docker-in-practice/todo.git  ⇽--- 克隆todoapp代码
WORKDIR todo  ⇽--- 移动到新的克隆目录
RUN npm install > /dev/null  ⇽--- 执行node包管理器的安装命令(npm)
EXPOSE 8000  ⇽--- 指定从所构建的镜像启动的容器需要监听这个端口
CMD ["npm","start"]  ⇽--- 指定在启动时需要执行的命令

Dockerfile的开始部分是使用 FROM 命令定义基础镜像。本示例使用了一个Node.js镜像以便访问Node.js程序。官方的Node.js镜像名为 node

接下来,使用 LABEL 命令声明维护人员。在这里,我们使用的是其中一个人的电子邮件地址,读者也可以替换成自己的,因为现在它是你的Dockerfile了。这一行不是创建可工作的Docker镜像所必需的,不过将其包含进来是一个很好的做法。到这个时候,构建已经继承了node容器的状态,读者可以在它上面做操作了。

接下来,使用 RUN 命令克隆todoapp代码。这里使用指定的命令获取应用程序的代码:在容器内运行 git 。在这个示例中,Git是安装在基础node镜像里的,不过读者不能对这类事情做假定。

现在使用 WORKDIR 命令移动到新克隆的目录中。这不仅会改变构建环境中的目录,最后一条 WORKDIR 命令还决定了从所构建镜像启动容器时用户所处的默认目录。

接下来,执行node包管理器的安装命令( npm )。这将为应用程序设置依赖。我们对输出的信息不感兴趣,所以将其重定向到/dev/null上。

由于应用程序使用了8000端口,使用 EXPOSE 命令告诉Docker从所构建镜像启动的容器应该监听这个端口。

最后,使用 CMD 命令告诉Docker在容器启动时将执行哪条命令。

这个简单的示例演示了Docker及Dockerfile的几个核心功能。Dockerfile是一组严格按顺序执行的有限的命令集的简单序列。它影响了最终镜像的文件和元数据。这里的 RUN 命令通过签出并安装应用程序影响了文件系统,而 EXPOSECMDWORKDIR 命令影响了镜像的元数据。

results matching ""

    No results matching ""